정규표현식 기초
📌 개념
자주 쓰는 패턴
{3} : 앞 문자 3개 반복
{1,3} : 앞 문자 1~3개 반복
[A-Za-z0-9] : 대문자 AZ / 소문자 az / 숫자 0~9 중 하나와 일치
정규표현식 사이트
regex101: build, test, and debug regex
기초 메타문자
표현식
| 표현식 | 의미 |
|---|
| [xy] | 문자 선택을 표현하며 x 와 y 중에 하나를 의미한다. |
| [^xy] | not 을 표현하며 x 및 y 를 제외한 문자를 의미한다. |
| [x-z] | range를 표현하며 x ~ z 사이의 문자를 의미한다. |
| ^ | escape 를 표현하며 ^ 를 문자로 사용함을 의미한다. |
| \b | word boundary를 표현하며 문자와 공백사이의 문자를 의미한다. |
| \B | non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다. |
| \d | digit 를 표현하며 숫자를 의미한다. |
| \D | non digit 를 표현하며 숫자가 아닌 것을 의미한다. |
| \s | space 를 표현하며 공백 문자를 의미한다. |
| \S | non space를 표현하며 공백 문자가 아닌 것을 의미한다. |
| \t | tab 을 표현하며 탭 문자를 의미한다. |
| \v | vertical tab을 표현하며 수직 탭(?) 문자를 의미한다. |
| \w | word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. |
| \W | non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. |
| Flag | 의미 |
|---|
| g | Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다. |
| i | Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다. |
| m | Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다. |
예제
- ^ : 문자열의 처음을 나타냄
| 식 | 뜻 | 맞는 문자열 |
|---|
| ^group | group으로 시작하는 문자열 | group, groups, group program, … |
- $ : 문자열의 끝을 나타냄
| 식 | 뜻 | 맞는 문자열 |
|---|
| ing$ | ing로 끝나는 문자열 | ing, sing, hosting, booting, … |
| ^code$ | code로 시작하고 끝남 | code |
- . : 임의의 한문자를 나타냄
| 식 | 뜻 | 맞는 문자열 |
|---|
| a.b | a와 b 사이에 한 문자가 낀 문자열 | aab, abb, acb, … |
| ab. | ab 다음에 한 문자가 붙은 문자열 | aba, abb, abc, … |
| a..b | a와 b 사이에 두 문자가 낀 문자열 | a11a, aabb, abbb, … |
| ^.ape | ape 앞에 한 문자가 낀 문자열로 시작함 | tape, caper, … |
-
- : 바로앞의 문자가 없거나 하나 이상이 있는 겅유
| 식 | 뜻 | 맞는 문자열 |
|---|
| m*r | r 앞에 m이 없거나 하나 이상 있음 | r, mr, mmr, mmmr, … |
| mr*s | m 다음에 r이 없거나 하나 이상 있고 s가 맨 뒤에 있음 | ms, mrs, mrrs, mrrrs, … |
| mrs* | mr 다음에 s가 없거나 하나 이상 있음 | mr, mrs, mrss, mrsss, … |
-
| 식 | 뜻 | 맞는 문자열 |
|---|
| m+r | r 앞에 m이 하나 이상 있음 | mr, mmr, mmmr, … |
| mr+s | m 다음에 r이 하나 이상 있고 s가 맨 뒤에 있음 | mrs, mrrs, mrrrs, … |
| mrs+ | mr 다음에 s가 하나 이상 있음 | mrs, mrss, mrsss, … |
- ? : 앞의 문자가 없거나 하나임
| 식 | 뜻 | 맞는 문자열 |
|---|
| m+r | r 앞에 m이 하나 이상 있음 | mr, mmr, mmmr, … |
| mr+s | m 다음에 r이 하나 이상 있고 s가 맨 뒤에 있음 | mrs, mrrs, mrrrs, … |
| mrs+ | mr 다음에 s가 하나 이상 있음 | mrs, mrss, mrsss, … |
- [] (꺽쇠묶음, 대괄호):
(문자 클래스로서 정규 표현식과는 언어가 다름)
- 특정한 문자열을 제외하려면 묶음안에 ’^‘를 사용
| 식 | 뜻 | 맞는 문자열 |
|---|
| [w]s | s 앞에 w가 붙음 | ws |
| [ws]p | p 앞에 w나 s가 붙음 | wp, sp |
| [a-z]8 | 8 앞에 잔 로마자(소문자) 하나가 붙음 | a8, b8, c8, … , z8 |
| [a-zA-z][0-9] | 로마자 하나 뒤에 숫자 하나가 붙음 | a0, b5, K3, … |
| [^w]s | s 바로 앞에 w가 아닌 문자 하나가 붙음 | as, 2s, es, … |
| [^ws]p | p 바로 앞에 w나 s가 아닌 문자 하나가 붙음 | ap, hp, op, … |
| [^a-z]8 | 8 바로 앞에 잔 로마자가 아닌 문자 하나가 붙음 | A8, C8, 38, #8, … |
| ^[^gh][^ij]$ | g나 h가 아닌 한 문자로 시작하고 i나 j가 아닌 한 문자로 끝남(꺾쇠묶음 밖의 ^는 문자열의 처음을 나타냄) | ab, ty, ig, jh, … |
- { } : 중괄호
| 식 | 뜻 | 맞는 문자열 |
|---|
| w{0}s | s 앞에 w가 없음 | s |
| w{1}s | s 앞에 w가 하나 붙음 | ws |
| ws{3}p | w가 앞에 오고 s가 셋 붙으면서 p가 뒤에 붙음 | wsssp |
| w{1,3}s | s 앞에 w가 1~3개 붙음 | ws, wws, wwws |
| w{,2}s | s 앞에 w가 두 개 이하 붙음 | s, ws, wws |
| w{2,}s | s 앞에 w가 두 개 이상 붙음 | wss, wsss, … |
- | : 또는 / or와 같은 선택문에 사용
| 식 | 뜻 | 맞는 문자열 |
|---|
| word | phrase | word 또는 phrase |
| mount(ed | ing) | mounted 또는 mounting |
| [^(a | b | c)].+ |
- (거꿀빗금) : 메터문자의 성분을 없앨때 사용
| 식 | 뜻 | 맞는 문자열 | 안 맞는 문자열 |
|---|
| ^[+] | 꺾쇠묶음으로 한 겹만 싸인 문자열 | [a], [ab], [abc], … | [], abcd, [a[]], … |
| [^.]+.(com | net) | com, net로 끝나는 바탕 도메인 이름(서브 도메인이 아닌 것) | a.com, b.net, … |
쉘 스크립트 - 문자열 : 정규표현식- 개요와 메타문자 (1)
💻 예시
이메일 정규표현식 (example@example.com)
^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$
^[0-9a-zA-Z] : a-z, A-Z, 0-9 중 하나로 시작
[-_\.]? : -, _, . 중 하나가 있을 수도 없을 수도 있고
([0-9a-zA-Z])* : a-z, A-Z, 0-9 가 0개 이상 존재
@ : @가 필수로 들어가고
[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])* : 앞부분과 동일한 도메인 규칙
\. : . 이 들어가며
[a-zA-Z]{2,3} : a-z, A-Z 가 2개 또는 3개 존재 (최상위 도메인)
$ : 문자열 끝
URL 정규표현식
^(https?):\/\/([^:\/\s]+)
^(https?) : http 또는 https로 시작
:\/\/ : :// 가 포함되며
([^:\/\s]+) : :, /, 공백 이외의 문자가 한 개 이상
() : 괄호 안의 정규표현식을 그룹으로 캡처
\s : 공백 문자
[^...] : 대괄호 안 문자를 제외한 문자
^(...) : 해당 패턴으로 시작